// 初始化云开发环境
wx.cloud.init({
    env: 'your_cloud_env_id',
    traceUser: true
})
const App = getApp();
const ai = wx.cloud.extend.AI;

Page({
    onShareAppMessage() {
        let title = 'AI简历优化助手 - 专业简历诊断与优化';
        let path = '/pages/resume-ai/resume-ai';
        return {
            title: title,
            path: path,
            imageUrl: "https://qzruocheng.oss-cn-beijing.aliyuncs.com/resume_assets/assets/icons/logo.png"
        }
    },

    data: {
        // 简历文件
        resumeFile: null,
        // 简历内容
        resumeContent: '',
        // 诊断状态
        isDiagnosing: false,
        // 诊断结果
        diagnosisResult: null,
        // 优化工具
        tools: [
            {
                name: '关键词优化',
                description: '根据目标职位推荐关键词',
                icon: 'https://qzruocheng.oss-cn-beijing.aliyuncs.com/resume_assets/assets/icons/keyword.png',
                type: 'keyword'
            },
            {
                name: '语言润色',
                description: '优化简历语言表达',
                icon: 'https://qzruocheng.oss-cn-beijing.aliyuncs.com/resume_assets/assets/icons/polish.png',
                type: 'polish'
            },
            // {
            //     name: '格式检查',
            //     description: '检查简历格式问题',
            //     icon: 'https://qzruocheng.oss-cn-beijing.aliyuncs.com/resume_assets/assets/icons/format.png',
            //     type: 'format'
            // },
            // {
            //     name: '简历模板',
            //     description: '选择专业简历模板',
            //     icon: 'https://qzruocheng.oss-cn-beijing.aliyuncs.com/resume_assets/assets/icons/templateai.png',
            //     type: 'template'
            // }
        ],
        // 工具弹窗
        showToolModal: false,
        currentTool: null,
        // 上传弹窗
        showUploadModal: false,
        // 关键词优化相关
        targetJob: '',
        keywords: [],
        // 语言润色相关
        textToPolish: '',
        polishedText: '',
        capsuleTop: "", //胶囊距离屏幕顶部的距离
        capsuleHeight: "", //胶囊高度
        navbarHeight: ""//导航栏高度
    },

    onLoad() {
        // 初始化页面
        this.setData({
            capsuleTop: App.globalData.capsule.top,
            capsuleHeight: App.globalData.capsule.height,
            navbarHeight: (App.globalData.capsule.top - App.globalData.system.statusBarHeight) * 2 + App.globalData.capsule.height + App.globalData.system.statusBarHeight,
        })
    },

    // 选择简历文件
    chooseResumeFile() {
        console.log('点击上传按钮') // 调试日志
        const targetDate = new Date('2025-08-05');
        const currentDate = new Date();
        if (currentDate < targetDate) {
            wx.showToast({
                title: '请前往企业版查看',
                icon: 'error',
                duration: 1000
            })
        }
        else {
            this.setData({
                showUploadModal: true
            }, () => {
                console.log('showUploadModal状态已更新:', this.data.showUploadModal) // 调试日志
            })
        }
    },

    // 选择文件类型
    chooseFile(e) {
        const type = e.currentTarget.dataset.type
        wx.showLoading({
            title: '准备上传...'
        })

        // 检查文件选择权限
        wx.getSetting({
            success: res => {
                const requiredScope = type === 'image' ? 'scope.writePhotosAlbum' : 'scope.chooseMessageFile'
                if (res.authSetting[requiredScope]) {
                    wx.authorize({
                        scope: requiredScope,
                        success: () => {
                            this.doChooseFile(type)
                        },
                        fail: () => {
                            wx.hideLoading()
                            wx.showModal({
                                title: '权限申请',
                                content: '需要文件权限才能上传简历，请前往设置开启权限',
                                confirmText: '去设置',
                                cancelText: '取消',
                                success: (res) => {
                                    if (res.confirm) {
                                        wx.openSetting({
                                            success: (settingRes) => {
                                                if (settingRes.authSetting[requiredScope]) {
                                                    this.doChooseFile(type)
                                                } else {
                                                    wx.showToast({
                                                        title: '您仍未开启文件权限',
                                                        icon: 'none'
                                                    })
                                                }
                                            }
                                        })
                                    }
                                }
                            })
                        }
                    })
                } else {
                    this.doChooseFile(type)
                }
            },
            fail: () => {
                wx.hideLoading()
                wx.showToast({
                    title: '权限检查失败',
                    icon: 'none'
                })
            }
        })
    },

    // 实际执行文件选择
    doChooseFile(type) {
        wx.chooseMessageFile({
            count: 1,
            type: type === 'image' ? 'image' : 'file',
            success: async res => {
                wx.hideLoading()
                if (res.tempFiles.length > 0) {
                    const file = res.tempFiles[0]

                    // 直接上传文件到云存储
                    wx.showLoading({ title: '上传中...' })
                    try {
                        // 生成唯一文件名
                        const timestamp = new Date().getTime()
                        const randomString = Math.random().toString(36).substring(2, 8)
                        const cloudPath = `ai_resumes/${timestamp}_${randomString}_${file.name}`

                        // 上传文件
                        const uploadRes = await wx.cloud.uploadFile({
                            cloudPath: cloudPath,
                            filePath: file.path
                        })

                        // 获取文件ID
                        const fileID = uploadRes.fileID

                        // 调用云函数获取文件信息
                        const processRes = await wx.cloud.callFunction({
                            name: 'uploadAiResume',
                            data: {
                                fileID: fileID
                            }
                        })

                        this.setData({
                            resumeFile: {
                                ...file,
                                fileID: fileID,
                                tempFileURL: processRes.result.data.tempFileURL,
                                downloadUrl: processRes.result.data.downloadUrl
                            },
                            showUploadModal: false
                        })

                        wx.showToast({
                            title: '上传成功',
                            icon: 'success'
                        })
                    } catch (err) {
                        console.error('上传失败', err)
                        wx.showToast({
                            title: '上传失败: ' + err.errMsg,
                            icon: 'none'
                        })
                    } finally {
                        wx.hideLoading()
                    }
                } else {
                    wx.showToast({
                        title: '未选择文件',
                        icon: 'none'
                    })
                }
            },
            fail: err => {
                wx.hideLoading()
                console.error('选择文件失败', err)
                wx.showToast({
                    title: '上传失败: ' + err.errMsg,
                    icon: 'none'
                })
            }
        })
    },

    // 处理简历内容输入
    handleResumeInput(e) {
        this.setData({
            resumeContent: e.detail.value
        })
    },

    // 开始诊断
    async startDiagnosis() {
        if (this.data.isDiagnosing) return

        if (!this.data.resumeFile) {
            wx.showToast({
                title: '请先上传简历文件',
                icon: 'none'
            })
            return
        }

        if (!this.data.resumeContent.trim()) {
            wx.showToast({
                title: '请输入简历大纲内容',
                icon: 'none'
            })
            return
        }

        if (this.data.resumeContent.length > 3000) {
            wx.showToast({
                title: '内容过长，请控制在3000字以内',
                icon: 'none'
            })
            return
        }

        this.setData({
            isDiagnosing: true,
            diagnosisResult: null
        })

        try {
            // 本地读取Word文件内容
            // 直接使用用户输入的简历内容
            const resumeContent = this.data.resumeContent.trim()

            // 调用AI分析简历内容
            wx.showLoading({ title: 'AI分析中...' })

            try {
                // 创建大模型实例
                // const model = wx.cloud.extend.AI.createModel("deepseek")

                wx.cloud.init({
                    env: "your_cloud_env_id"
                });
                // 系统提示词
                const systemPrompt = `
你是一个专业的简历分析助手，请严格按照以下JSON格式返回分析结果：

{
  "overallScore": number (1-100),
  "summary": {
    "title": string,
    "description": string
  },
  "dimensions": [
    {
      "name": "内容完整性"|"关键词匹配"|"成就量化"|"格式规范",
      "score": number (1-100),
      "description": string
    }
  ],
  "suggestions": [
    {
      "type": "important"|"critical"|"normal",
      "title": string,
      "brief": string,
      "detail": string,
      "examples": [
        {
          "before": string,
          "after": string
        }
      ],
      "expanded": boolean
    }
  ]
}

分析要求：
1. 从内容完整性、关键词匹配、成就量化、格式规范四个维度评分
2. 提供3-5条具体改进建议
3. 建议包含实际修改示例
4. 使用专业但易懂的语言
`

                // 创建大模型实例
                const model = wx.cloud.extend.AI.createModel("deepseek");
                let mockResult
                // 调用大模型分析简历
                try {
                    const res = await model.generateText({
                        model: "deepseek-v3",
                        messages: [
                            { role: "system", content: systemPrompt },
                            { role: "user", content: `请分析以下简历内容：\n${resumeContent}` }
                        ],

                    })
                    console.log('AI接口调用成功', res)
                    // 获取完整响应并解析为JSON
                    const aiResponse = this.convertMarkdownJsonToObject(res.choices[0].message.content)



                    console.log('AI响应内容:', aiResponse)

                    if (!aiResponse) {
                        throw new Error('AI未返回有效响应')
                    }

                    // 解析AI返回的JSON数据
                    mockResult = aiResponse
                    console.log('解析后的结果:', mockResult)

                    // 确保返回数据包含必要字段
                    if (!aiResponse.overallScore || !aiResponse.summary || !aiResponse.dimensions) {
                        throw new Error('AI分析结果格式不正确')
                    }
                } catch (err) {
                    console.error('AI调用失败:', err)
                    wx.hideLoading()
                    wx.showToast({
                        title: 'AI服务不可用，使用本地分析',
                        icon: 'none'
                    })

                    // 本地模拟分析结果
                    mockResult = {
                        overallScore: 75,
                        summary: {
                            title: '基本合格，有待优化',
                            description: '简历基本结构完整，但部分内容需要改进'
                        },
                        dimensions: [
                            {
                                name: '内容完整性',
                                score: 85,
                                description: '简历包含基本信息、工作经历、教育背景等必要部分'
                            },
                            {
                                name: '关键词匹配',
                                score: 65,
                                description: '与目标职位相关的关键词较少，建议增加行业术语'
                            },
                            {
                                name: '成就量化',
                                score: 70,
                                description: '部分工作经历缺乏量化成果，建议补充具体数据'
                            },
                            {
                                name: '格式规范',
                                score: 80,
                                description: '格式规范，易于阅读'
                            }
                        ],
                        suggestions: [
                            {
                                type: 'important',
                                title: '增加关键词',
                                brief: '根据目标职位添加相关行业术语',
                                detail: '分析目标职位描述，提取关键词并融入简历',
                                examples: [],
                                expanded: false
                            }
                        ]
                    }
                }


                this.setData({
                    diagnosisResult: mockResult,
                    isDiagnosing: false
                })
                wx.hideLoading()
            } catch (err) {
                console.error('诊断失败', err)
                wx.hideLoading()
                wx.showToast({
                    title: '诊断失败，请重试',
                    icon: 'none'
                })
                this.setData({
                    isDiagnosing: false
                })
            }
        } catch (err) {
            console.error('获取模板详情失败', err)
            wx.hideLoading()
            wx.showToast({
                title: '获取模板详情失败，请重试',
                icon: 'none'
            })
        }
    },

    // 切换建议展开状态
    toggleSuggestion(e) {
        const index = e.currentTarget.dataset.index
        const suggestions = this.data.diagnosisResult.suggestions
        suggestions[index].expanded = !suggestions[index].expanded
        this.setData({
            [`diagnosisResult.suggestions`]: suggestions
        })
    },

    // 应用建议
    applySuggestion(e) {
        const index = e.currentTarget.dataset.index
        wx.showToast({
            title: '建议已应用',
            icon: 'success'
        })
        // 实际应用中这里会更新简历内容
    },

    // 打开工具
    openTool(e) {
        const index = e.currentTarget.dataset.index
        this.setData({
            currentTool: this.data.tools[index],
            showToolModal: true,
            keywords: [],
            polishedText: ''
        })
    },

    // 关闭工具弹窗
    closeToolModal() {
        this.setData({
            showToolModal: false
        })
    },

    // 关闭上传弹窗
    closeUploadModal() {
        this.setData({
            showUploadModal: false
        })
    },

    // 生成关键词
    async generateKeywords() {
        if (!this.data.targetJob.trim()) {
            wx.showToast({
                title: '请输入目标职位',
                icon: 'none'
            })
            return
        }

        wx.showLoading({
            title: '生成中...'
        })

        try {
            // 调用AI服务获取关键词建议
            try {


                wx.cloud.init({
                    env: "your_cloud_env_id"
                });


                const model = wx.cloud.extend.AI.createModel("deepseek")

                const res = await model.generateText({
                    model: "deepseek-v3",
                    messages: [
                        {
                            role: "system",
                            content: `你是一个职业顾问，请根据目标职位"${this.data.targetJob}"推荐5-8个最相关的技术关键词，按相关性高到低排序，返回JSON数据格式：
                                [{"text":"关键词1","relevance":"高"},{"text":"关键词2","relevance":"中"}]`
                        }
                    ],

                })
                console.log('AI接口调用成功', res);
                // 处理AI返回的响应数据
                const rawResponse = this.convertMarkdownJsonToObject(res.choices[0].message.content)
                console.log(rawResponse);


                let keywords = []
                try {
                    keywords = rawResponse
                    if (!Array.isArray(keywords)) {
                        throw new Error('返回格式不正确')
                    }
                } catch (e) {
                    console.error('解析AI响应失败:', e)
                    keywords = [
                        { text: 'Vue.js', relevance: '高' },
                        { text: 'React', relevance: '高' },
                        { text: 'Webpack', relevance: '中' }
                    ]
                }

                this.setData({ keywords })
            } catch (err) {
                console.error('AI调用失败:', err)
                wx.showToast({
                    title: 'AI服务不可用，使用默认关键词',
                    icon: 'none'
                })
                this.setData({
                    keywords: [
                        { text: 'JavaScript', relevance: '高' },
                        { text: 'HTML/CSS', relevance: '高' },
                        { text: '前端框架', relevance: '中' }
                    ]
                })
            }

            wx.hideLoading()
        } catch (err) {
            console.error('生成关键词失败', err)
            wx.hideLoading()
            wx.showToast({
                title: '生成失败',
                icon: 'none'
            })
        }
    },
    //  将md 语法的json 转成 可以json
    convertMarkdownJsonToObject(markdownText) {
        // 移除开头的 ```json 和结尾的 ``` 标记
        const cleanJsonString = markdownText
            .replace(/^```json\s*/, '')
            .replace(/\s*```$/, '')
            .trim();

        try {
            // 解析处理后的字符串为 JSON 对象
            return JSON.parse(cleanJsonString);
        } catch (error) {
            console.error('JSON 解析失败:', error);
            return null;
        }
    },

    // 选择关键词
    selectKeyword(e) {
        const index = e.currentTarget.dataset.index
        const keyword = this.data.keywords[index].text
        wx.showToast({
            title: `已选择: ${keyword}`,
            icon: 'none'
        })
        // 实际应用中这里会将关键词添加到简历
    },

    // 润色文本
    async polishText() {
        if (!this.data.textToPolish.trim()) {
            wx.showToast({
                title: '请输入需要润色的文本',
                icon: 'none'
            })
            return
        }

        wx.showLoading({
            title: '润色中...'
        })

        try {
            wx.cloud.init({
                env: "your_cloud_env_id"
            });
            // 创建大模型实例
            const model = wx.cloud.extend.AI.createModel("deepseek")

            // 系统提示词
            const systemPrompt = `
      你是一个专业的简历优化助手，请对用户提供的简历文本进行润色。
      要求：
      1. 保持原意的同时优化表达
      2. 使用更专业的词汇和句式
      3. 突出成就和贡献
      4. 适当使用量化数据
      `

            // 调用大模型
            const res = await model.generateText({
                model: "deepseek-v3",
                messages: [
                    { role: "system", content: systemPrompt },
                    { role: "user", content: this.data.textToPolish }
                ],

            })

            // 获取完整响应
            const rawResponse = res.choices[0].message.content

            this.setData({
                polishedText: rawResponse
            })

            wx.hideLoading()
        } catch (err) {
            console.error('润色失败', err)
            wx.hideLoading()
            wx.showToast({
                title: '润色失败',
                icon: 'none'
            })
        }
    },

    // 复制润色结果
    copyPolishResult() {
        wx.setClipboardData({
            data: this.data.polishedText,
            success: () => {
                wx.showToast({
                    title: '已复制到剪贴板',
                    icon: 'success'
                })
            }
        })
    },

    // 目标职位输入
    handleTargetJobInput(e) {
        this.setData({
            targetJob: e.detail.value
        })
    },

    // 润色文本输入
    handleTextToPolishInput(e) {
        this.setData({
            textToPolish: e.detail.value
        })
    }
})